import { Inject, Injectable, Scope } from "@nestjs/common";
import { OrgRepository } from "./org.repository";
import { REQUEST } from "@nestjs/core";
import { AddOrgDto } from "./dto/addOrgDto";
import { Request } from 'express'
import { orgPageDto } from "./dto/pageOrgDto";
import { EditOrg } from "./dto/editOrgDto";
import { UpdateOrg } from "./dto/deleteOrgDto";

@Injectable({ scope: Scope.REQUEST })
export class OrgService {

  constructor(
    @Inject(REQUEST) private req: Request,
    private repository: OrgRepository
  ) { }

  /**
   * 查询指定组织及所有下级组织
   * @param orgId 组织Id
   * @returns 组织扁平数组
   */
  getOrgTree(orgId: number | null) {
    return this.repository.getOrgTree(orgId);
  }

  /**
   * 新增组织架构
   * @param dto 参数
   * @returns true or false
   */
  addOrg(dto: AddOrgDto) {

    // 获取当前用户ID
    dto.createUserId = this.req.user.userId
    // 默认最高级组织
    dto.parentId = dto?.parentId || 0

    return this.repository.addOrg(dto)
  }

  /**
   * 查询组织架构分页
   * @param params 参数
   * @returns 列表数据和总数
   */
  async orgPage(params: orgPageDto) {
    return this.repository.orgPage(params)
  }

  /**
   * 查询组织架构详情
   * @param params 参数
   * @returns 详情
   */
  getDetail(params: { id: number }) {
    return this.repository.getDetail(params)
  }

  /**
   * 修改组织架构
   * @param dto 参数
   * @returns true or false
   */
  editOrg(dto: EditOrg) {

    // 获取当前用户ID
    dto.updateUserId = this.req.user.userId

    return this.repository.editOrg(dto)
  }

  /**
   * 删除组织架构
   * @param params 参数
   * @returns true or false
   */
  deleteOrg(params: UpdateOrg) {

    // 获取当前用户ID
    params.updateUserId = this.req.user.userId

    return this.repository.deleteOrg(params)
  }
}